package l.l.w.CodingInterviews;

/**
 * 与二叉搜索树的结构类似！！！
 * 给定一个二叉树和其中的一个结点，请找出中序遍历顺序的下一个结点并且返回。
 * 注意，树中的结点不仅包含左右子结点，同时包含指向父结点的指针。
 */
public class 二叉树的下一个结点 {
    public TreeLinkNode GetNext(TreeLinkNode pNode){
        if(pNode == null) return pNode;
        TreeLinkNode result = pNode;
        if(pNode.right != null){
            result = pNode.right;
            while(result.left != null){
                result = result.left;
            }
            return result;
        }else{
            result = pNode.next;
            while(result != null && result.right == pNode){
                pNode = result;
                result = result.next;
            }
            return result;
        }
    }
}
class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
